package com.mccken.demo.proxy.jdk.jdk1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import lombok.SneakyThrows;

//以下代码由$Proxy0.class反编译得到
public final class $Proxy0 extends Proxy implements UserService {
	private static Method m3;	
	private static Method m4;	
	static {
		try {
			m3 = Class.forName("com.mccken.demo.proxy.jdk.jdk1.UserService").getMethod("addUser", new Class[0]);
			m4 = Class.forName("com.mccken.demo.proxy.jdk.jdk1.UserService").getMethod("editUser", new Class[0]);
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}    
    
	//构造方法。将invocationhandler实例从代理类赋值到父类
	public $Proxy0(InvocationHandler invocationhandler){
		super(invocationhandler);//创建父类对象
	}

	//此处可以看出，当调用代理类的addUser方法，会执行父类对象属性h的invoke方法，
	//h即为通过匿名内部类创建的处理器对象
	@SneakyThrows
	@Override
	public final void addUser() {
		super.h.invoke(this, m3, null);	//这里的this是代理对象，m3为addUser方法
	}

	@Override
	@SneakyThrows
	public void editUser() {
		super.h.invoke(this, m4, null);	//这里的this是代理对象，m4为editUser方法
	}
}